package busco

import (
	"wails/schema/enums/busenum"
)

// // @schema_export --ident=schema --json --config=增益项
// // @schema_go
// // // @cache_go
// // @cache_ts
// // @alias 增益项
// type B增益 struct {
// 	// @alias 名称
// 	M名称 string
// 	// @alias 描述
// 	M描述 string
// 	// @alias 图标
// 	T图标 string
// 	// 通常用于查找或配置时，便于识别
// 	// @alias 标识
// 	M标识 string `alias:"标识"`
// 	// @alias 增益类别
// 	L类别 Z增益类别
// 	// @alias 标签
// 	B标签 map[string]string
// 	// @alias 标旗
// 	B标旗 map[Z增益标旗]bool
// 	// 获得增益的主体对象消耗的资源
// 	// 场景：对敌人施加减益时的一刻，先消耗敌人的资源。（战斗系统常用，这里可考虑去掉）
// 	// @alias 获得消耗
// 	H获得消耗 string `link:"消费"`
// }

// // @schema_export --ident=schema --json --config=增益
// // @schema_go
// // // @cache_go
// // @cache_ts
// // @alias 增益_集合
// type B增益_集合 struct {
// 	B增益

// 	// @alias 增益集
// 	Z增益集 map[string]string `link:"增益"`
// }

// // @schema_export --ident=schema --json --config=增益
// // @schema_go
// // // @cache_go
// // @cache_ts
// // @alias 增益_属性
// type B增益_属性 struct {
// 	B增益
// 	// @alias 增加执行
// 	Z增加执行 string `link:"执行"`
// 	// @alias 减少执行
// 	J减少执行 string `link:"执行"`
// 	// @alias 最大值
// 	Z最大值 int
// 	// @alias 最小值
// 	Z最小值 int
// 	// @alias 修正
// 	X修正 interface{} `_type:"增益修正"`
// 	//
// }

// // @schema_export --ident=schema --json --config=增益
// // @schema_go
// // // @cache_go
// // @cache_ts
// // @alias 增益_时间
// type B增益_时间 struct {
// 	B增益

// 	// @alias 最大叠加数
// 	// 增益可在一个单位上叠加的最大次数
// 	Z最大叠加数 int
// 	// @alias 启动执行
// 	// 当该增益被启用时所发生的执行
// 	Q启动执行 string `link:"执行"`
// 	// @alias 禁用执行
// 	// 当该增益被禁用时所发生的执行
// 	J禁用执行 string `link:"执行"`
// 	// @alias 终止执行
// 	// 如果该增益一直持续了整个时间段则会发生的执行。
// 	Z终止执行 string `link:"执行"`
// 	// @alias 最终执行
// 	// 当该增益被移除时所发生的执行。
// 	Z最终执行 string `link:"执行"`
// 	// @alias 初始执行
// 	// 当该增益被应用时所发生的执行
// 	C初始执行 string `link:"执行"`
// 	// @alias 周期执行
// 	// 每个周期所发生的执行。
// 	Z周期执行 string `link:"执行"`
// 	// @alias 刷新执行
// 	// 当该增益被重新应用时所发生的执行
// 	S刷新执行 string `link:"执行"`
// 	// @alias 持续时间
// 	C持续时间 float64
// 	// @alias 周期
// 	// 在应用该增益后的重复间隔。该增益会在每一次间隔期间执行其周期性执行[PeriodicEffect]。
// 	// 在增益激活后的[Period]秒开始计数。
// 	Z周期 float64
// 	// @alias 周期计数
// 	// “周期性执行”可被执行的最大次数。-1 表示无限制。
// 	Z周期计数 int
// 	// @alias 启用条件
// 	// 如果这些条件中所有条件都符合，则该增益将被启用。
// 	Q启用条件 map[string]string `link:"条件"`
// 	// @alias 移除条件
// 	// 如果这些条件中有一个返回为假，则该增益将被移除。
// 	Y移除条件 map[string]string `link:"条件"`
// 	// 击杀怪物可获得的额外奖励的条件
// 	// 场景：新年活动，击杀指定怪物有几率可掉落福字
// 	// @alias 击杀条件
// 	J击杀条件 map[string]string `link:"条件"`
// 	// 击杀怪物可获得的额外奖励
// 	// @alias 击杀额外奖励
// 	J击杀额外奖励 string `link:"奖励"`
// 	// @alias 修正
// 	X修正 interface{} `_type:"增益修正"`
// }

// @schema_export --ident=schema --json --_type=增益修正 --消息来源=0
// @schema_go
// @cache_go
// @cache_ts
// @alias 增益修正
type S增益修正 struct {
	// 配置编号->增益数量
	// @alias 增益数量
	Z增益数量 map[string]float64
}

// 如果增益的主体为单位, 则直接修正单位的单位属性
// 如果增益的主体为角色, 则修改角色下所有单位的单位属性. 玩家/游戏服/公会/队伍/团队同角色
// 当增益的修正为单位时, 不支持[主体]为物品/技能
// @schema_export --ident=schema --json --_type=增益修正 --消息来源=0
// @schema_go
// @cache_go
// @cache_ts
// @alias 增益修正_卡片
type S增益修正_卡片 struct {
	// 修正单位的等级属性
	// @alias 等级属性
	D等级属性 map[string]*X修正公式
	// 修正单位的动态属性
	// @alias 属性
	S属性 map[string]*X修正公式
	// 替换掉的单位扩展
	// @alias 单位扩展分类
	S单位扩展分类 map[busenum.S单位扩展分类]string `link:"单位扩展分类"`
	// @alias 指定单位集
	Z指定卡片 map[string]string `link:"卡片"`
	// @alias 指定分类
	Z指定分类 string
	// @alias 指定标签
	Z指定标签 string
	// @alias 指定属性
	Z指定属性 map[string]*X修正公式
}

// y=x*(1+系数)*乘数+加成
type X修正公式_属性 struct {
	// @alias 系数
	X系数 float64
	// @alias 乘数
	C乘数 float64
	// @alias 加成
	J加成 float64
	// @alias 属性
	S属性 string `link:"属性"`
	// @alias 乘以等级
	C乘以等级 bool
}

type S增益项 struct {
	// @alias 增益
	Z增益 string `link:"增益"`
	// @alias 数量
	S数量 int `value:"1"`
}

// @schema_go --EnumToString=true
// @alias 增益标旗
type Z增益标旗 int

const (
	Z增益标旗_允许指定种类 Z增益标旗 = iota
	Z增益标旗_允许指定分类
	// 增益的持续时间包含离线时长
	Z增益标旗_包含离线时长
	Z增益标旗_禁止重叠
)

// @schema_go
// @alias 增益类别
type Z增益类别 uint

const (
	// 永久
	Z增益类别_永久 Z增益类别 = 1 << iota
)
